了解 Move.toml 和 Move.lock 文件
现在您已经知道如何使用 Move on Sui 创建 Move 包了。在本课中,我们将详细探讨 Move 包的重要组件。我们将探讨 Move.toml
和 Move.lock
文件的工作原理以及它们的用例。
Move.toml 文件
当您使用 sui move new
命令创建 Move 包时,它会使用它创建一个 Move.toml
文件。默认情况下,它包含一些内容,但随着时间的推移,随着你的成长,你会发现你需要更改文件中的内容并根据你的需要进行修改。因此,最终,我们需要详细了解该文件,以便将来轻松使用它。
您可能已经注意到 Move.toml
文件具有三个主要组成部分。让我们来探索一下它们。
[package]
:[package]
部分包含 Move 包的名称和版本。它代表您的包的元数据。[dependencies]
:[dependencies]
代表我们的 Move 包所依赖的所有包。默认情况下,此处提到的唯一包是 Sui 框架,但随着您的进步,您可以在此处添加更多包。[addresses]
:这代表命名地址列表。该字段帮助我们为要在智能合约代码中使用的地址提供别名。
现在,让我们通过示例详细讨论这些组件。
[package]
部分
[package]
部分具有以下三个重要字段。
name
:name
字段帮助识别您在运行sui move new
时创建的 Move 包名称,例如sui move new hello_world
version
:version
有助于识别软件包的版本。默认情况下,Sui 编译器在创建包时为您的包提供第一个版本,例如0.0.1
。published-at
:默认情况下,Move 编译器不会创建此字段。此字段有助于识别我们包裹的地址。例如,Sui 框架发布在0x2
地址,因此其发布位置将为"0x2"
。我们在发布包后包含此字段,并帮助其他包使用published-at
地址访问我们的包。
现在,让我们看看默认情况下 [package]
部分在 Move.toml
文件中的样子。
#![allow(unused)] fn main() { [package] name = "hello_world" version = "0.0.1" }
添加 published-at
字段后 [package]
部分如下所示。请记住,这只是一个示例,地址可能会有所不同。
#![allow(unused)] fn main() { [package] name = "hello_world" version = "0.0.1" published-at = "0x0" }
[dependencies]
部分
默认情况下,Sui 编译器会在 [dependencies]
部分添加一个包。它使用 GitHub 链接添加了 Sui 框架。默认情况下是这样的:
#![allow(unused)] fn main() { [dependencies] Sui = { git = "https://github.com/MystenLabs/sui.git", subdir = "crates/sui-framework/packages/sui-framework", rev = "framework/testnet" } }
您还可以从本地路径导入任何包。为此,您可以像这样添加包。
#![allow(unused)] fn main() { Sui = { local = "../crates/sui-framework" } }
[addresses]
部分
默认情况下,Sui 编译器在 [addresses]
部分添加两个地址:一个是包的地址,另一个是 Sui 网络的地址。它看起来是这样的。
#![allow(unused)] fn main() { [addresses] hello_world = "0x0" sui = "0x2" }
在这里,别名,例如 sui
,可以帮助我们轻松地从智能合约中的 sui
导入包,如下所示:
#![allow(unused)] fn main() { use sui::transfer }
如果没有别名,我们就需要编写地址,这可能会给我们带来混乱。
Move.lock
文件
当您使用 sui move build
命令构建 Move 包时,它会在包的根目录中创建 Move.lock
文件。 Move.lock
文件包含有关您的包及其需要导入的依赖项的信息。这有助于验证您的源代码及其正在导入的代码。由于 Move.toml
文件是可编辑的,因此 Move.lock
文件不可编辑。 Move.lock
帮助编译器识别运行 Move 包所需的基本内容,这就是为什么我们无法更改或将 Move.lock
文件移动到任何其他位置。这是我们的 hello_world
模块的 Move.lock
的样子。
#![allow(unused)] fn main() { @generated by Move, please check in and do not edit manually. [move] version = 0 manifest_digest = "1EA2B7F6C986E247256A7F281C4A866CE325DE9724C9D8BCBE2B0BA4CB7E18C5" deps_digest = "F8BBB0CCB2491CA29A3DF03D6F92277A4F3574266507ACD77214D37ECA3F3082" dependencies = [ { name = "Sui" }, ] [[move.package]] name = "MoveStdlib" source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/move-stdlib" } [[move.package]] name = "Sui" source = { git = "https://github.com/MystenLabs/sui.git", rev = "framework/testnet", subdir = "crates/sui-framework/packages/sui-framework" } dependencies = [ { name = "MoveStdlib" }, ] }
总结
Move.toml
和 Move.lock
文件在 Move 包中起着至关重要的作用,这就是为什么了解它们的工作原理以及我们甚至需要它们的原因。接下来,我们将探讨在 Move on Sui 中智能合约是如何声明的。我们将探讨 module
和 use
关键字在 Move on Sui 中的用法。